# Aiogram Yandex.Cloud serverless example
[![Supported python versions](https://img.shields.io/badge/Python-3.7%20%7C%203.8-blue?style=flat-square&logo=python)](https://www.python.org/)
[![Telegram Bot API](https://img.shields.io/badge/Telegram%20Bot%20API-lightgrey?style=flat-square&logo=telegram)](https://core.telegram.org/bots/api/)
[![Aiogram](https://img.shields.io/badge/Aiogram-blue?style=flat-square)](https://github.com/aiogram/aiogram/)
[![Yandex.Cloud](https://img.shields.io/badge/Yandex.Cloud-functions-9cf?style=flat-square&logo=)](https://cloud.yandex.ru/)

Пример простого Telegram бота на Aiogram для Yandex.Cloud functions.
## AWS Lambda & API Gateway VS Yandex.Cloud functions
|  | AWS Lambda & API Gateway | Yandex.Cloud functions |
|:-:|:-:|:-:|
| Удобство создания функции | - (создавать нужно не только функцию, но и триггер из API Gateway) | + |
| Автоматическая установка пакетов | - (приходятся вручную добавлять в пакет для загрузки) | + (достаточно создать файл `requirements.txt`) |
| Поддержка асинхронности | +- (нужно самостоятельно запускать loop из синхронного хендлера) | + (работает "из коробки") |
| Поддержка Python 3.8 | + | - |
| Цена | + (выходит очень дёшево и есть огромный free tier) | - (примерно 50 рублей за миллион вызовов, бесплатно только в пробный период (2 месяца)) |
## Настройка бота
- [Создайте бота у Botfather](https://core.telegram.org/bots#6-botfather)
### Создание функции в Яндекс.Облаке
- [Перейдите в консоль Яндекс.Облака](https://console.cloud.yandex.ru/)
- Создайте платёжный профиль и облако
- В меню слева выберите Cloud Functions
- Создайте функцию
- В редакторе выберите среду выполнения `python37-preview` (**Это важно**)
### Загрузка кода в функцию
#### С помощью zip-файла
- Склонируйте данный репозиторий (`git clone https://github.com/DavisDmitry/aiogram-yandex.cloud-serverless-example`)
- Перейдите в директорию репозитория
- Поместите файлы `main.py` и `requierements.txt` в zip архив вручную или с помощью bash-скрипта: `./create-package.sh`
- Загрузите zip-архив в функцию Яндекс.Облака
- Укажите точку входа `main.handler`
- Выберите сервисный аккаунт или создайте новый
- Установите переменные окружения, они описаны ниже
#### С помощью редактора
- Создайте файлы `main.py` и `requirements.txt`
- Скопируйте содержимое из аналогичный файлов в репозитории
- Укажите точку входа `main.handler`
- Выберите сервисный аккаунт или создайте новый
- Установите переменные окружения, они описаны ниже
#### Переменные окружения:
- `TOKEN`: Bot API token, полученный от botfather
- `LOGGING_LEVEL`: уровень логирования (опцианально), по умолчанию - `info`

<p align="center">
    <img src="readme-images/logging_levels.png" />
</p>

### Profit!
<p align="center">
    <img src="readme-images/result.gif" />
</p>

## P.S.
Код в данном репозитории почти полностью повторяет [другую мою работу](https://github.com/DavisDmitry/aiogram-aws-serverless-example). Serverless технологии очень похожи у разных провайдеров.
